
/**

 * 继承:
 * 从已有类中派生出新的类。继承可以使得子类具有父类的各种属性和方法。
 * 而不需要再次编写相同的代码。在令子类别继承父类别的同时，可以重新定义某些属性，
 * 并重写某些方法，即覆盖父类原有的属性和方法，使其获得与父类不同的功能。
 * 子类继承父类后，子类具有父类属性和方法，然而也同样具备自己所独有的属性和方法
 * 代码得到了共享。提高了代码的重用性，避免了重复书写
 */
/****
 * 模型
 * 索引签名
 * 批量描述key的一种方式
 */
namespace _1{

class AModel{
    // sex:string;
    name?:string;
    readonly age?:number;//可选属性 加个？
    [index:string]:string | number|undefined;
}
namespace a{
    abstract class Animal{
        name:string=""
        constructor(name:string){
            this.name = name
        }
        run(){
            console.log("animal run ")
        }
        call(){
            console.log("animal call");
        }
        abstract eat():void;
    }

    export class Dog extends Animal{
        constructor(name:string){
            super(name)
        }
        // eat(food:string){
        // }
        eat(): void {
            console.log("dog eat","name:",this.name);
        }
        run(): void {
            super.run()
            console.log("dog run","name:",this.name)
        }
    }
}
let dog = new a.Dog("小黑")

dog.run()
dog.eat()
}

